/**
 * 本地持久存储
 *
 * https://github.com/sunnylqm/react-native-storage/blob/master/README-CHN.md
 *
 */

import {AsyncStorage} from 'react-native';
import Storage from 'react-native-storage';

import sync from './StorageTool_sync';

var storage = new Storage({
  // 最大容量，默认值1000条数据循环存储
  size: 1000,

  // 存储引擎：对于RN使用AsyncStorage，对于web使用window.localStorage
  // 如果不指定则数据只会保存在内存中，重启后即丢失
  storageBackend: AsyncStorage,

  // 数据过期时间，默认一整天（1000 * 3600 * 24 毫秒），设为null则永不过期
  defaultExpires: null,

  // 读写时在内存中缓存数据。默认启用
  enableCache: true,

  // 如果storage中没有相应数据，或数据已过期，
  // 则会调用相应的sync方法，无缝返回最新数据。
  // sync方法的具体说明会在后文提到
  // 你可以在构造函数这里就写好sync的方法
  // 或是在任何时候，直接对storage.sync进行赋值修改
  // 或是写到另一个文件里，这里require引入
  // sync: require('./StorageSync'),
});

// # 使用建议说明
/*
  1、最好在全局范围内创建一个（且只有一个）storage实例，方便直接调用
  2、使用方法(
      - 这样，在此**之后**的任意位置即可以直接调用storage
      - 注意：全局变量一定是先声明，后使用
      如果你在某处调用storage报错未定义，请检查global.storage = storage语句是否确实已经执行过了
    )
    2.1、对于web
      window.storage = storage;
    2.2、对于react native
      global.storage = storage;
  3、放在index.js入口 import './tools/StorageTool'; （
      - 必须在某个必定会执行的文件中import这个文件（因为这个文件只需要执行不需要引入任何模块，直接import '路径/文件名' 即可，不需要 from），才能保证这个不是一个孤立的没运行的文件，
      - 而且还得保证import的顺序，即必须在其它组件使用storage之前import
    ）
 */
storage.sync = sync;
global.storage = storage;